package com.zelin.cart.web.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.zelin.entity.OrderEntity;
import com.zelin.entity.vo.PayVo;
import com.zelin.order.service.OrderService;
import com.zelin.pay.service.PayService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

import java.util.List;

/**
 * ------------------------------
 * 功能：
 * 作者：WF
 * 微信：hbxfwf13590332912
 * 创建时间：2021/8/17-14:58
 * ------------------------------
 */
@Controller
public class PayController {

    @Reference(timeout = 5000)
    private PayService payService;
    @Reference(timeout = 5000)
    private OrderService orderService;

    /**
     * 功能: 点击支付页面中的支付宝按钮时行支付，生成支付页面
     * 参数:
     * 返回值: java.lang.String
     * 时间: 2021/8/17 15:09
     */
    @RequestMapping("pay")
    @ResponseBody
    public String payOrder(String outTradeNo){
        //0. 得到登录id
        String name = SecurityContextHolder.getContext().getAuthentication().getName();

        //1. 根据支付订单号查询出payVo对象(payvo就是向支付宝发送请求时需要准备的参数)
       PayVo payVo = payService.findPayVoFromRedis(name,outTradeNo);
       //2. 调用支付方法(返回的是输入用户名及密码的页面)
       String result = payService.pay(payVo,1);  //参数2：代表支付类型 1: 代表订单支付 2：代表秒杀支付
        System.out.println("result = " + result);
       //3. 返回
       return result;
    }

    /**
     * 功能: 支付成功后跳转到的页面(returnurl,支付宝的同步通知)
     * 参数:
     * 返回值: java.lang.String
     * 时间: 2021/8/17 20:46
     */
    @RequestMapping("/orderlist")
    public String orderlist(Model model){
        //0. 得到登录id
        String name = SecurityContextHolder.getContext().getAuthentication().getName();
        //1. 根据登录用户id得到订单及订单项列表
        List<OrderEntity> orderEntities = orderService.findOrdersByUserId(name);
        //2. 放到model中到
        model.addAttribute("orderList",orderEntities);
        return "orderlist";
    }
}
